#ifndef _GPIO_H_
#define _GPIO_H_


#define  GPIO_BASE  									(0x40300000)

#define GPIO_IRQ_NUM   									26

#define FTGPIO010_OFFSET_DATAOUT						0x00
#define FTGPIO010_OFFSET_DATAIN							0x04
#define FTGPIO010_OFFSET_PINDIR							0x08
#define FTGPIO010_OFFSET_PINPASS						0x0c
#define FTGPIO010_OFFSET_DATASET						0x10
#define FTGPIO010_OFFSET_DATACLEAR						0x14
#define FTGPIO010_OFFSET_PULLEN							0x18
#define FTGPIO010_OFFSET_PULLTYPE						0x1c
#define FTGPIO010_OFFSET_INTR_EN						0x20
#define FTGPIO010_OFFSET_INTR_STATE						0x24
#define FTGPIO010_OFFSET_INTR_MASKED					0x28
#define FTGPIO010_OFFSET_INTR_MASK						0x2c
#define FTGPIO010_OFFSET_INTR_CLEAR						0x30
#define FTGPIO010_OFFSET_INTR_TRIG						0x34
#define FTGPIO010_OFFSET_INTR_BOTH						0x38
#define FTGPIO010_OFFSET_INTR_RISENEG					0x3c
#define FTGPIO010_OFFSET_BOUNCE_EN						0x40
#define FTGPIO010_OFFSET_BOUNCE_PRESC					0x44
#define TOTAL_GPIO_NUM                                  32

typedef void (*gpio_interrupt_cb)(int num, int is_high);

typedef struct {
    gpio_interrupt_cb func;
} gpio_callback_t;

typedef unsigned char         bool;

extern gpio_callback_t gpio_callback[TOTAL_GPIO_NUM];
int uni_gpio_isr_enable(bool enable, int gpio_num);
int uni_gpio_isr_cfg(int gpio_num, int type);
void uni_gpio_irq_init(void);
void uni_gpio_irq_disable(void);
void uni_gpio_irq_enable(void);
void uni_set_gpio_dir(int gpio,int dir);
void uni_set_gpio_value(int gpio,int value);
void uni_get_gpio_value(int gpio,int *value);
void uni_set_gpio_pull_mode(int gpio,int pull_mode);

#endif

